/*******************************************************************************
 * 版权：北京润尼尔网络科技有限公司，保留所有版权<br>
 * 版本：v1.0.0<br>
 * 文件：Application.js<br>
 * 日期：2017年9月29日<br>
 * 作者: 样顺强<br>
 * 功能：应用程序入口对象，只负责页面视图创建，不负责业务逻辑处理<br>
 * 
 * 修改记录：<br>
 * 日期 描述 更新功能<br>
 ******************************************************************************/
 
 window.makeNamespace(window,"Rainier.UI.V2");

/**
 * 类型名称：Rainier.UI.V2.Application<br>
 * 类型功能：应用程序,只负责界面视图创建，不负责业务逻辑处理<br>
 */
Rainier.UI.V2.Application = Rainier.Basic.CompositeObject.extend({

 	NAME : "Rainier.UI.V2.Application",

 	/**
	 * 函数名称：init<br>
	 * 函数功能：构造函数<br>
	 * 参数信息：$container:应用程序容器对象，
	 * 异常信息：无<br>
	 */
 	init : function($container,courseName){
 		this._super();
 		this.$container = $container;
 		this.context    = new Rainier.UI.V2.AppContext(this);
 		this.components = {};
 		this.courseName = arguments[1] ? arguments[1] : ' ';
 		this.dialogList = new draw2d.util.ArrayList();	//结果以对话框的形式显示；则将打开的对话框存入此处
 	},

 	/**
	 * 函数名称：buildGUI<br>
	 * 函数功能：完成应用程序界面初始化<br>
	 * 参数输入：无<br>
	 * 函数返回：无<br>
	 * 异常信息：无<br>
	 */
 	buildGUI : function(connectFlag){
 		this.createMainView();
 		this.createViewComponent();

 		//启动连接
 		if(connectFlag){
 			this.context.connectComputePlugin();
 		}

	    //发送给父页面表示页面已加载完毕
	    if(window.parent){
	    	window.parent.postMessage('exper_sym_loaded','*');
	    }

	    window.localStorage.clear();
 	},

 	/**
	 * 函数名称：createView<br>
	 * 函数功能：创建主体页面<br>
	 * 参数输入：无<br>
	 * 函数返回：无<br>
	 * 异常信息：无<br>
	 */
 	createMainView : function(){
 		var name = this.courseName;
 		var properties = {
 			title    : name,
 			headerCls: "app-header",
 			bodyCls  : "app-body",
 			fit      : true,
 			border   : false,
 			maximized: true,
 			footer   : '<div class="easyui-panel app-footer"></div>'
 		}
 		this.panel = new Rainier.UI.V2.UICompositePanel(this.$container,properties);
 		//todos://
 		var draw2dEditor = new Rainier.UI.V2.Draw2dGraphicalEditor();
 		draw2dEditor.createComposite(this.panel);

 		this.setContextEditor(draw2dEditor);
 		
 		//解决div 点击上移问题。。给canvas复制时，宽度计算出错导致；
 		
 		/*var appBodyHeight = $(window).height()-$(".app-header").outerHeight();
        $(".app-body").css("height",appBodyHeight);*/
 		/*$(window).resize(function(){
            var appBodyHeight = $(window).height()-$(".app-header").outerHeight();
            $(".app-body").css("height",appBodyHeight);
            $(".app-body").children().css("height",appBodyHeight);
            $(".app-body").children().children().css("height",appBodyHeight);
        })*/
        
 		
 	},

 	/**
	 * 函数名称：createViewComponent<br>
	 * 函数功能：创建组件页面<br>
	 * 参数输入：$container : 当前组件容器元素<br>
	 * 函数返回：无<br>
	 * 异常信息：无<br>
	 */
 	createViewComponent : function(){
 		for(var component in this.components){
 			if (this.components[component].createView) {
 				this.components[component].createView();
 			}
 		}
 	},

 	/**
	 * 函数名称：registerViewComponent<br>
	 * 函数功能：注册组件到主体程序<br>
	 * 参数输入：objParams : {key,viewComponent}<br>
	 * 函数返回：无<br>
	 * 异常信息：无<br>
	 */
 	registerViewComponent : function(objParams){
 		$.extend(true,this.components,objParams);
 	},

 	/**
	 * 函数名称：setContextEditor<br>
	 * 函数功能：向context注入创建的Ediotr编辑器，便于context进行控制<br>
	 * 参数输入：activeEditor : 创建的editor编辑器对象<br>
	 * 函数返回：无<br>
	 * 异常信息：无<br>
	 */
 	setContextEditor : function(activeEditor){
 		this.context.setActiveEditor(activeEditor);
 	},

 	/**
	 * 函数名称：getContext<br>
	 * 函数功能：获取应用程序的上下文对象<br>
	 * 参数输入：无<br>
	 * 函数返回：应用程序上下文<br>
	 * 异常信息：无<br>
	 */
 	getContext : function(){
 		return this.context;
 	},
 	
 	/**
	 * 函数名称：getControlComponent<br> 
	 * 函数功能：获取应用程序的控制组件<br>
	 * 参数输入：无<br>
	 * 函数返回：控制栏组件对象<br>
	 * 异常信息：无<br>
	 */
 	getControlComponent : function(){
 		return this.components.APP_VIEW_COMPONENT_CONTROL;
 	},

 	/**
	 * 函数名称：getMenuComponent<br>
	 * 函数功能：获取应用程序的菜单组件对象<br>
	 * 参数输入：无<br>
	 * 函数返回：菜单栏组件对象<br>
	 * 异常信息：无<br>
	 */
 	getMenuComponent : function(){
 		return this.components.APP_VIEW_COMPONENT_MENU;
 	},

 	/**
	 * 函数名称：getPratLibComponent<br>
	 * 函数功能：获取应用程序的元件库组件对象<br>
	 * 参数输入：无<br>
	 * 函数返回：器材栏组件对象<br>
	 * 异常信息：无<br>
	 */
 	getPartLibComponent : function(){
 		return this.components.APP_VIEW_COMPONENT_PARTLIB;
 	},

 	/**
	 * 函数名称：getPropertyComponent<br>
	 * 函数功能：获取应用程序的属性栏组件<br>
	 * 参数输入：无<br>
	 * 函数返回：属性栏组件对象<br>
	 * 异常信息：无<br>
	 */
 	getPropertyComponent : function(){
 		return this.components.APP_VIEW_COMPONENT_PROPERTY;
 	},

 	/**
	 * 函数名称：getExperimentComponent<br>
	 * 函数功能：获取应用程序的实验列表组件<br>
	 * 参数输入：无<br>
	 * 函数返回：实验列表组件对象<br>
	 * 异常信息：无<br>
	 */
 	getExperimentComponent : function(){
 		return this.components.APP_VIEW_COMPONENT_EXPRIMENT;
 	},

 	/**
	 * 函数名称：getSezrchComponent<br>
	 * 函数功能：获取应用程序的检索组件<br>
	 * 参数输入：无<br>
	 * 函数返回：搜索组件对象<br>
	 * 异常信息：无<br>
	 */
	getSearchComponent : function(){
		return this.components.APP_VIEW_COMPONENT_SEARCH;
	},
	/**
     * 函数名称：getSezrchComponent<br>
     * 函数功能：获取应用程序的实验结果<br>
     * 参数输入：无<br>
     * 函数返回：搜索组件对象<br>
     * 异常信息：无<br>
     */
    getResultComponent : function(){
        return this.components.APP_VIEW_COMPONENT_RESULT;
    },
 });